package com.penghaisoft.microwms.base.web.data.controller;

import com.penghaisoft.microwms.base.web.data.service.IMdLocationService;
import com.penghaisoft.microwms.common.Constant;
import com.penghaisoft.microwms.common.base.model.BaseDictionary;
import com.penghaisoft.microwms.common.controller.BaseController;
import com.penghaisoft.microwms.common.data.model.MdLocation;
import com.penghaisoft.microwms.common.dto.Resp;
import com.penghaisoft.microwms.common.dto.TransResult;
import com.penghaisoft.microwms.common.page.Pager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Description 库位管理
 * @author gaofeng
 * @date 2017年5月24日 下午1:45:57 
 * @version 1.0
 */
@RestController
@RequestMapping(value = "/data/location")
@Slf4j
public class MdLocationController extends BaseController {

	@Autowired
	private IMdLocationService mdLocationService;

	/** 
	 * @Title create
	 * @Description 新增记录
	 * @author gaofeng
	 * @date 2017年5月24日 下午1:39:58
	 * @param mdLocation
	 * @return TransResult
	 */
	@PostMapping("c")
	public TransResult create(MdLocation mdLocation) {
		mdLocation.preInsert();
		mdLocation.setFactoryCode(getCurrentFactoryCode());
		mdLocation.setFactoryName(getCurrentUserFactoryDto().getFactoryName());
		Resp resp = new Resp();
		MdLocation tmp = mdLocationService.findByCode(mdLocation);
		if(tmp == null){
			mdLocation.setCreateBy(getLoginName());
			mdLocation.setLastModifiedBy(getLoginName());
			resp = mdLocationService.create(mdLocation);
		} else {
			resp.setMsg("base.data.location.conflict");
		}
		return fromResp(resp);
	}

	/** 
	 * @Title delete
	 * @Description 删除记录（逻辑删除active_flag=0)
	 * @author gaofeng
	 * @date 2017年5月24日 下午1:40:17
	 * @param mdLocation
	 * @return TransResult
	 */
	@PostMapping("d")
	public TransResult delete(MdLocation mdLocation) {
		mdLocation.preUpdate();
		Resp resp = mdLocationService.delete(mdLocation);
		return fromResp(resp);
	}

	/** 
	 * @Title list
	 * @Description 查询列表
	 * @author gaofeng
	 * @date 2017年5月24日 下午1:40:40
	 * @param page
	 * @param rows
	 * @param mdLocation
	 * @return TransResult
	 */
	@PostMapping("list")
	public TransResult list(@RequestParam(name = "page", defaultValue = "1") int page,
                            @RequestParam(name = "rows", defaultValue = "10") int rows, MdLocation mdLocation) {
		
		mdLocation.setFactoryCode(getCurrentFactoryCode());
		Pager<MdLocation> result = mdLocationService.findListByCondition(page, rows, mdLocation);
		return success(result);
	}
	
	/** 
	 * @Title listByType
	 * @Description 根据location_use字段筛选
	 * @author gaofeng
	 * @date 2017年5月24日 下午1:41:14
	 * @param locUse
	 * @param page
	 * @param rows
	 * @param mdLocation
	 * @return TransResult
	 */
	@PostMapping("{locUse}/list")
	public TransResult listByType(@PathVariable String locUse, @RequestParam(name = "page", defaultValue = "1") int page,
                                  @RequestParam(name = "rows", defaultValue = "10") int rows, MdLocation mdLocation) {
		mdLocation.setLocationUse(locUse);
		mdLocation.setFactoryCode(getCurrentFactoryCode());
		Pager<MdLocation> result = mdLocationService.findListByCondition(page, rows, mdLocation);
		return success(result);
	}

	/** 
	 * @Title queryById
	 * @Description 查询单条
	 * @author gaofeng
	 * @date 2017年5月24日 下午1:43:09
	 * @param id
	 * @return TransResult
	 */
	@GetMapping("r/{id}")
	public TransResult queryById(@PathVariable String id) {
		MdLocation mdLocation = mdLocationService.findById(id);
		return success(mdLocation);
	}

	/** 
	 * @Title update
	 * @Description 修改记录
	 * @author gaofeng
	 * @date 2017年5月24日 下午1:43:22
	 * @param mdLocation
	 * @return TransResult
	 */
	@PostMapping("u")
	public TransResult update(MdLocation mdLocation) {
		mdLocation.preUpdate();
		mdLocation.setLastModifiedBy(getLoginName());
		Resp resp = mdLocationService.update(mdLocation);
		return fromResp(resp);
	}
	
	/** 
	 * @Title queryAllByCondition
	 * @Description 根据条件查询下面的库位
	 * @author zhangxu
	 * @date 2017年5月24日 下午1:43:51
	 * @param mdLocation
	 * @return TransResult
	 */
	@PostMapping("r/all")
	public TransResult queryAllByCondition(MdLocation mdLocation) {
		mdLocation.setFactoryCode(getCurrentFactoryCode());
		List<MdLocation> mdLocations = mdLocationService.queryAllByCondition(mdLocation);
		return success(mdLocations);
	}
	
	/**
	 * @Title queryLocationsUnderArea
	 * @Description 查询库区下的库位
	 * @author jingzh
	 * @date 2017年12月2日 下午4:14:16
	 * @param areaCode 库区编码
	 * @return TransResult
	 */
	@PostMapping("r/{areaCode}/location")
	public TransResult queryLocationsUnderArea(
			@PathVariable(required = true) String areaCode) {
		MdLocation condition = new MdLocation();
		if ("all".equals(areaCode)) {
			condition.setAreaCode(null);
		} else {
			condition.setAreaCode(areaCode);
		}
		List<MdLocation> mdLocations = mdLocationService
				.queryLocationsUnderArea(condition);
		return success(mdLocations);
	}

	@GetMapping("get/wl_code")
	public TransResult queryLocationCode() {
		MdLocation condition = new MdLocation();
		condition.setActiveFlag(Constant.CODE_ONE);
		List<BaseDictionary> list = mdLocationService.getLocationCode(condition);
		return success(list);
	}
}
